home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / asm / alib11b.zip / CODE1.ZIP / DISPTEXT / CRTUTIL.ASM < prev    next >
Assembly Source File  |  1994-10-04  |  6KB  |  238 lines

  1.     page    66,132
  2.  
  3. comment 
  4. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -( DISPLAY )
  5. GET_ANSI_COLOR - get color attribute used by ANSI driver.
  6. ;
  7. ; inputs:    none
  8. ; output:    AH = color attribute
  9. ;* * * * * * * * * * * * * *
  10. 
  11.     public    get_ansi_color
  12. GET_ANSI_COLOR    PROC    FAR
  13.     APUSH   BP,BX,CX,DX
  14.     XOR     BH,BH
  15.     MOV     AH,03
  16.     INT     10h            ;get cursor position (dx) and size (cx)
  17.     PUSH    DX            ;save origional cursor position
  18.     CALL    read_cursor_at_0
  19.     PUSH    AX            ;save char. read using bios
  20. ;
  21. ; setup to write char. using dos call
  22. ;    
  23.     PUSH    DS            ;save our segment
  24.     MOV     AX,CS        ;set segment
  25.     MOV     DS,AX        ;  to -cs:-
  26.     MOV     BX,0001        ;select stdout
  27.     
  28.     CALL    GAC_1        ;put address on stack
  29. GAC_1:
  30.     POP     DX            ;set dx= offset l_21b2
  31.     MOV     CX,0001
  32.     MOV     AH,40h
  33.     INT     21h            ;write stdout(bx) 1 byte(cx) data at ds:dx
  34.     CALL    read_cursor_at_0
  35.     POP     DS            ;restore data segment
  36.     MOV     BP,AX        ;save char. read using dos
  37.     XOR     BH,BH
  38.     POP     AX            ;restore char. read using bios
  39.     MOV     BL,AH        ;move bios color to -> bl
  40.     MOV     AH,09
  41.     MOV     CX,0001
  42.     PUSH    BP            ;save char. read using dos
  43.     INT     10h            ;write char.(al) bl=bios color bh=page cx=repeat
  44.     POP     BP            ;restore char. read using dos
  45.     POP     DX            ;restore origional cursor position
  46.     MOV     AH,02        ;
  47.     PUSH    BP            ;save char. read using dos
  48.     INT     10h            ;restore origional cursor posn
  49. ;                first pop of -ax- restores char read using DOS
  50.     APOP    AX,DX,CX,BX,BP
  51.     RETF
  52. GET_ANSI_COLOR    ENDP
  53.  
  54. ;----------------------    
  55. ; read_cursor_at 0 - read character at cursor position
  56. ;  inputs: none
  57. ;  output: ax = character
  58. ;
  59. read_cursor_at_0:    
  60.     MOV     AH,02
  61.     XOR     DX,DX         ;set cursor address -> 0
  62.     XOR     BH,BH        ;select page 0
  63.     INT     10h            ;set cursor position from -dx- bh=page
  64.     MOV     AH,08
  65.     INT     10h            ;read character & color at cursor -> ax
  66.     RET
  67. comment 
  68. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -( DISPLAY )
  69. CURSOR_ - Move cursor and set size to standard underscore.
  70. ;
  71. ; inputs:    DH = row
  72. ;            DL = column
  73. ;            
  74. ; outputs:   register -ax- is modified
  75. ;* * * * * * * * * * * * * *
  76. 
  77.     public    cursor_
  78. CURSOR_    PROC    FAR
  79.     mov    al,0
  80.     jmp    cursor_entry
  81. CURSOR_    ENDP
  82. comment 
  83. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -( DISPLAY )
  84. SHOW_CURSOR - move cursor to (row, col) and update cursor shape
  85. ;
  86. ; inputs:    DH = row offset from top of screen
  87. ;            DL = column offset from left side
  88. ;
  89. ; outputs:   register -ax- modified
  90. ;
  91. ; notes:     Cursor shape is underscore if INSERT is off, large block
  92. ;            if INSERT is on.
  93. ;* * * * * * * * * * * * * *
  94. 
  95.     public    SHOW_CURSOR
  96. SHOW_CURSOR    PROC    FAR
  97.      mov     al,80h
  98. cursor_entry:
  99.     pushf
  100.     APUSH   BP,BX,CX,DX,SI,ES
  101.     MOV     AH,0Fh
  102.     INT     10h            ;get video mode -> al=mode bh=page ah=pixels
  103.     MOV     AH,02
  104.     INT     10h            ;set cursor position -> -dx-
  105.     XOR     AH,AH
  106.  
  107.     mov     al,cs:lib_info.crt_rows
  108.     mov     bx,cs:lib_info.crt_seg
  109.  
  110.     mov     cx,0
  111.     mov     es,cx
  112.     MOV     CX,0507h
  113.     MOV     DX,WORD PTR ES:[0463h] ;get crt port address  mono=3b4 color=3d4
  114.     CMP     DX,03B4h        ;check if mono display
  115.     JNZ     c_color        ; jmp if color display
  116.     CMP     AL,1Dh        ;check if rows = 29
  117.     JGE     c_color        ; jmp if 29 rows or more
  118.     MOV     CX,0C0Dh
  119.     MOV     AL,2Ah
  120. c_color:
  121.     AND     BL,BYTE PTR ES:[0417h] ;
  122.     JZ      c_skip
  123.     SHR     CH,1
  124. c_skip:
  125.     CMP     AL,1Dh
  126.     JB      c_bios_set
  127.     CMP     AL,2Dh    ; '-'
  128.     JB      c_wrt_port
  129. c_bios_set:
  130.     MOV     AH,01
  131.     INT     10h            ;set text mode cursor size (cx)
  132.     JMP     c_exit
  133. c_wrt_port:
  134.     MOV     AL,0Ah
  135.     MOV     AH,CH
  136.     OUT     DX,AX
  137.     INC     AL
  138.     MOV     AH,CL
  139.     OUT     DX,AX
  140.     MOV     WORD PTR ES:[0460h],CX
  141. c_exit:
  142.     APOP    ES,SI,DX,CX,BX,BP
  143.     POPF
  144.     RETF
  145. SHOW_CURSOR    ENDP
  146. comment 
  147. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -( DISPLAY )
  148. HIDE_CURSOR - make hardware cursor invisible at present location
  149. ;
  150. ; inputs:    none
  151. ; outputs:   none
  152. ;
  153. ;* * * * * * * * * * * * * *
  154. 
  155.     public    HIDE_CURSOR
  156. HIDE_CURSOR    PROC    FAR
  157.     APUSH   AX,CX
  158.     MOV     CX,2020h
  159.     MOV     AH,01
  160.     PUSH    BP
  161.     INT     10h
  162.     POP     BP
  163.     APOP    CX,AX
  164.     RETF
  165. HIDE_CURSOR    ENDP
  166. comment 
  167. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -( DISPLAY )
  168. BLINK_ON:  enable blinking attriutes
  169. ;
  170. ; inputs: none
  171. ; output: none
  172. ;
  173. ; notes:  The opposite of blink is intenisified colors.  The normal default
  174. ;         is blink on.
  175. ;* * * * * * * * * * * * * *
  176. 
  177.     public    BLINK_ON
  178. BLINK_ON        PROC    FAR
  179.     PUSH    BX
  180.     MOV     BX,0001
  181.     JMP     blink_entry
  182. BLINK_ON ENDP
  183. comment 
  184. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -( DISPLAY )
  185. BLINK_OFF:  disable blinking attriutes
  186. ;
  187. ; inputs: none
  188. ; output: none
  189. ;
  190. ; note: Blink off turns intensified color selection on.  The default at
  191. ;       boot time is blink on.
  192. ;* * * * * * * * * * * * * *
  193. 
  194.     public    BLINK_OFF
  195. BLINK_OFF    PROC    FAR
  196.     PUSH    BX
  197.     MOV     BX,0000
  198. blink_entry:
  199.     APUSH   AX,DX,ES
  200.     SUB     AX,AX
  201.     MOV     ES,AX
  202.     MOV     AL,BYTE PTR ES:[0487h]    ;get ega/vga control flag
  203.     OR      AL,AL
  204.     JNZ     ega_vga_blink            ;jmp if flag seems active
  205. ;
  206. ; program mono/cga controller directly
  207. ;     
  208.     MOV     DX,WORD PTR ES:[0463h]    ;get crt port address
  209.     ADD     DL,04
  210.     MOV     AL,BYTE PTR ES:[0465h]    ;current mode select register setting
  211.     OR      BX,BX            ;bx=0(BLINK_OFF)  bx=1(BLINK_ON)
  212.     JZ      cga_mono_boff        ;jmp if blink off request
  213.     OR      AL,20h
  214.     JMP     cga_mono_bon
  215. ;
  216. ; blink off
  217. ;    
  218. cga_mono_boff:
  219.     AND     AL,0DFH            ;disable blink bit
  220. cga_mono_bon:
  221.     OUT     DX,AL
  222.     MOV     BYTE PTR ES:[0465h],AL    ;set new mode select reg data
  223.     JMP     blink_exit
  224. ;
  225. ; ega/vga blink setting
  226. ;    
  227. ega_vga_blink:
  228.     MOV     AX,1003h
  229.     INT     10h                ;bx=0(BLINK_OFF)  bx=1(BLINK_ON)
  230. blink_exit:
  231.     APOP    ES,DX,AX
  232.     POP     BX
  233.     RETF
  234. BLINK_OFF    ENDP
  235.  
  236.     end
  237.